﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 结构体
{

//    定义一个结构体，名为PersonStruct，有三个成员变量：姓名、电话、地址，
//在主方法中，创建一个PersonStruct结构体对象p1，为p1的成员变量赋值。
//再声明一个PersonStruct结构体变量p2，把p1赋值给p2，改变p2的姓名，打印p1的内容。

//定义一个类，名为PersonClass，有三个成员变量：姓名、电话、地址，
//在主方法中，创建一个PersonClass对象p3，为p3的成员变量赋值。
//再声明一个PersonClass变量p4，把p3赋值给p4，改变p4的姓名，打印p3的内容。


//观察打印结果，并在在注释中，说下你对此的认识（它们为什么会这样？）
    class Program
    {
        struct PersonStruct {
            public string name;
            public string phone;
            public string address;

        }
        static void Main(string[] args)
        {

            PersonStruct P1;
            P1.name = "张飞";
            P1.phone = "14959407856";
            P1.address = "北京";

            PersonStruct P2=P1;
            P2.name = "刘备";
           

            Console.WriteLine("我叫{0},我来自{1}，我的联系电话是{2}",P1.name,P1.address,P1.phone) ;
            Console.WriteLine("我叫{0},我来自{1}，我的联系电话是{2}", P2.name, P2.address, P2.phone);

            //结构体中的数据是值类型，值的传递方式是复制一份数据，
            //所以接受赋值的那个变量再怎么改变，都不会影响到提供赋值的那个变量


            //定义一个类，名为PersonClass，有三个成员变量：姓名、电话、地址，
            //在主方法中，创建一个PersonClass对象p3，为p3的成员变量赋值。
            //再声明一个PersonClass变量p4，把p3赋值给p4，改变p4的姓名，打印p3的内容。

            PersonStructClass1 p3 = new PersonStructClass1();
            p3.name = "里斯";
            p3.phone  = "10943448967";
            p3.address = "广驱";

            PersonStructClass1 p4 = new PersonStructClass1();
            p4 = p3;
            p4.name = "关羽";
            p4.phone = "10086";

            Console.WriteLine("我叫{0},我来自{1}，我的联系电话是{2}", p3.name, p3.address, p3.phone);

            //创建类的一个对象是去到堆内存开辟一个内存空间，当一个类的对象给另一个类的对象赋值时，
            //两个对象之间传递的是内存地址，当接收赋值的那个对象进行数据修改时，
            //提供赋值的那个对象的数据势必会跟着做 一样的变化。
         
        }
    }
}
